package com.demo.factoryMethod;

/**
 * Created by Administrator on 2017/5/23.
 *
 * 工厂方法模式
 * 优点：
 * 1.工厂方法用来创建客户端所需要的产品，隐藏了具体哪种产品被实例化，
 * 用户只关心产品对应的工厂，无需关心创建细节，甚至产品类的类名。
 * 2.工厂方法模式的关键是在于工厂和产品角色设计的多态性，它能够让工厂可以自主确
 *定创建何种产品对象，而如何创建这个对象的细节则完全封装在具体工厂内部。工厂方法模
 *式之所以又被称为多态工厂模式，就正是因为所有的具体工厂类都具有同一抽象父类。
 * 3.使用工厂方法模式的另一个优点是在系统中加入新产品时，无须修改抽象工厂和抽象产品
 *提供的接口，无须修改客户端，也无须修改其他的具体工厂和具体产品，而只要添加一个具
 *体工厂和具体产品就可以了，这样，系统的可扩展性也就变得非常好，完全符合“开闭原则”。
 *缺点：
 * 1.在添加新产品时，需要编写新的具体产品类，而且还要提供与之对应的具体工厂类，系统
 *中类的个数将成对增加，在一定程度上增加了系统的复杂度，有更多的类需要编译和运行，
 *会给系统带来一些额外的开销。
 *2.由于考虑到系统的可扩展性，需要引入抽象层，在客户端代码中均使用抽象层进行定义，
 *增加了系统的抽象性和理解难度，且在实现时可能需要用到DOM、反射等技术，增加了系统
 *的实现难度。
 */
public class Client {
    public static void main(String[] args) {
        LoggerFactory factory;
        Logger logger;
//        factory = new FileLoggerFactory();
        factory = (LoggerFactory)XMLUtils.getBean();
        logger = factory.createLogger();
        logger.writeLog();
    }
}

